package cn.cdm.service;

import cn.cdm.domain.MiaoshaOrder;
import cn.cdm.domain.MiaoshaUser;
import cn.cdm.domain.OrderInfo;
import cn.cdm.vo.GoodsVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class MiaoshaService {
	
	@Autowired
    GoodsService goodsService;

	@Autowired
    OrderService orderService;


	public long getMiaoshaResult(Long userId, long goodsId) {
		MiaoshaOrder order = orderService.getMiaoshaOrderByUserIdGoodsId(userId, goodsId);
		if(order != null) {
			// 秒杀成功
			return order.getOrderId();
		}else {
			return -1;
		}
	}

	/**
	 *  减库存 下订单 写入秒杀订单
	 *  若去掉此处的声明式事务注解，可能导致秒杀商品的库存减为0，但创建的秒杀订单只有3个，即库存和订单不匹配的问题
	 * @param user
	 * @param goods
	 * @return
	 */
	@Transactional(isolation = Isolation.DEFAULT)
	public OrderInfo miaosha(MiaoshaUser user, GoodsVo goods) {
		// 1、减库存。注意，当数据库中的库存大于0时，才去减库存。
		boolean success = goodsService.reduceStock(goods);
		// 如果减库存成功了，才生成订单。如果减库存成功后再创建生效订单，否则不会生成订单
		if (success) {
			// 2、创建订单
			// 3、写入秒杀订单order_info表、miaosha_order表
			return orderService.createOrder(user, goods);
		} else {
			return null;
		}
	}

	public void reset(List<GoodsVo> goodsVoList) {
		goodsService.reSetStock(goodsVoList);
		// 删除订单信息表、秒杀订单表
		orderService.deleteOrders();
	}

}




































